package com.example.service.impl;

import com.example.dao.ProductTypeInfoDao;
import com.example.pojo.dto.ProductPageDTO;
import com.example.pojo.orm.ProductTypeInfo;
import com.example.pojo.vo.PageVO;
import com.example.service.ifac.ProductTypeInfoService;
import com.example.util.JsonResult;
import com.example.util.ResultCodeEM;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 季鑫利
 * @description 商品类别接口实现
 */
@Service
public class ProductTypeInfoServiceImpl implements ProductTypeInfoService {

    /**
     * 商品分类dao
     */
    @Autowired
    private ProductTypeInfoDao productTypeInfoDao;

    /**
     * 新增商品类别
     *
     * @param typeName 商品类别名称
     * @return 操作验证信息
     * @author 季鑫利
     */
    @Override
    public JsonResult saveProduct(String typeName) {
        JsonResult result = new JsonResult();
        if (typeName == null) {
            result.setStatus(ResultCodeEM.ERROR);
            result.setMessage("类别名称不能为空");
            return result;
        }
        // 名称是否已存在
        boolean exist = productTypeInfoDao.countByTypeName(typeName) > 0;
        if (exist) {
            result.setMessage("名称已存在");
            result.setStatus(ResultCodeEM.ERROR);
            return result;
        }
        //不存在，执行存储操作
        boolean bRet = productTypeInfoDao.saveProduct(typeName) > 0;
        if (!bRet) {
            result.setStatus(ResultCodeEM.ERROR);
            result.setMessage("新增商品类别失败");
            return result;
        }
        result.setStatus(ResultCodeEM.OK);
        result.setMessage("新增商品类别成功");
        return result;
    }

    /**
     * 逻辑删除
     *
     * @param id 商品类别id
     * @return 操作验证信息
     * @author 季鑫利
     */
    @Override
    public JsonResult removeProduct(Integer id) {
        JsonResult result = new JsonResult();
        if (id == null || id <= 0) {
            result.setStatus(ResultCodeEM.ERROR);
            result.setMessage("商品id异常");
            return result;
        }
        boolean bRet = productTypeInfoDao.removeProduct(id) > 0;
        if (!bRet) {
            result.setStatus(ResultCodeEM.ERROR);
            result.setMessage("逻辑删除商品类别失败");
            return result;
        }
        result.setStatus(ResultCodeEM.OK);
        result.setMessage("逻辑删除商品类别成功");
        return result;
    }

    /**
     * 更新商品类别
     *
     * @param typeName 商品类别名称
     * @param id       商品类别id
     * @return 操作验证信息
     * @author 季鑫利
     */
    @Override
    public JsonResult updateProduct(String typeName, Integer id) {
        JsonResult result = new JsonResult();
        if (typeName == null || id == null || id <= 0) {
            result.setStatus(ResultCodeEM.ERROR);
            result.setMessage("参数信息异常");
            return result;
        }
        boolean bRet = productTypeInfoDao.updateProduct(typeName, id) > 0;
        //更新失败
        if (!bRet) {
            result.setStatus(ResultCodeEM.ERROR);
            result.setMessage("更新商品类别失败");
            return result;
        }
        result.setStatus(ResultCodeEM.OK);
        result.setMessage("更新商品类别成功");
        return result;
    }

    /**
     * 查询商品类别信息
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    @Override
    public JsonResult<PageVO<ProductTypeInfo>> queryProduct(@RequestBody ProductPageDTO pageDTO) {
        JsonResult result = new JsonResult();
        if (pageDTO.getPageNum() == null
                || pageDTO.getPageNum() <= 0
                || pageDTO.getTake() == null
                || pageDTO.getTake() <= 0) {
                result.setStatus(ResultCodeEM.ERROR);
                result.setMessage("参数有误");
                return result;
        }
        PageVO<ProductTypeInfo> pageVO = new PageVO<>();
        //查询总条数
        int count = productTypeInfoDao.count(pageDTO);
        //存在就返回数据，不存在返回空数组
        List<ProductTypeInfo> list = count > 0 ?
                productTypeInfoDao.queryProduct(pageDTO) : new ArrayList<>();
        pageVO.setCount(count);
        pageVO.setList(list);
        result.setData(pageVO);
        result.setStatus(ResultCodeEM.OK);
        return result;
    }
}
